﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using DA_OOMModel;
using DA_OOMModelIDAL;
using DA_OOMDALFactory;
using System.Collections;
using System.IO;

namespace DaCredito
{
    public partial class EmissaoBoleto : WebPage
    {

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!this.IsPostBack)
            {
                this.HabilitarControles(false);          
            }

            

        }

        protected override void PrePageLoad()
        {

            base.PrePageLoad();


        }
        private Int32 RecuperaSacadoSelecionado()
        {
            if (Column_Sacado.SelectedIndex < 0)
                throw new Exception("É necessário definir o Sacado.");

            string lSIDSacado = Column_Sacado.Items[Column_Sacado.SelectedIndex].Value;
   
            if (lSIDSacado == null || lSIDSacado.Trim() == "")
                throw new Exception("É necessário definir o Sacado.");

            return Convert.ToInt32(lSIDSacado);

        }
        protected override bool OnUpdate()
        {
            int liIDSacado = this.RecuperaSacadoSelecionado();

            ISacadoDAL loSacadoDAO = ConcreteDALFactory.CreateSacadoDAL();

            Sacado loSacado = loSacadoDAO.Load(new SacadoPK(liIDSacado));

            // ---------------------------------
            // Cadastro do Titulo
            // ---------------------------------
             //int liIdTitulo = Field_UsrIdUsuario.Value == "" ? 0 : Convert.ToInt32(Column_UsrIdUsuario.Value);

            ITituloFinanceiroDAL loTituloDAO = ConcreteDALFactory.CreateTituloFinanceiroDAL();

            TituloFinanceiro loTitulo = new TituloFinanceiro();
            
            loTitulo.TtfDtCadastro = DateTime.Today;
            loTitulo.TtfNuTitulo = Convert.ToInt32(Field_NumeroDocumento.Text);
            loTitulo.TtfDtVencimento = Convert.ToDateTime(Field_DataVencimento.value);
            loTitulo.TtfVlTitulo = Convert.ToDecimal(Field_ValorBoleto.value);
            loTitulo.TtfDtEmissaoBoleto = DateTime.Today;
            loTitulo.Cliente = (Cliente)Session["Cliente"];
            loTitulo.Sacado = loSacado;

            loTitulo = ControladorDaCredito.GetInstance().CadastrarTituloFinanceiro(loTitulo);

            Session["TituloFinanceiro"] = loTitulo;


            return true;
        }
        protected bool EmitirBoleto()
        {
            string lsCaminhoArquivo = Request.PhysicalApplicationPath;
            string lsNomeArquivo =  "teste2.html";

            TituloFinanceiro loTituloFinanceiro = (TituloFinanceiro) Session["TituloFinanceiro"];
            
            string lsConteudoHtmlBoleto = ControladorDaCredito.GetInstance().EmitirBoleto(loTituloFinanceiro);
            // loUsuario = ControladorDaCredito.GetInstance().CadastrarUsuario(loUsuario);
         //   Response.WriteFile(lsConteudoHtmlBoleto);
            //Session["ConteudoBoleto"] = lsConteudoHtmlBoleto;

            try
            {
                //Usarei a cláusula using como boas práticas de programação em todos os métodos
                //Instancio a classe FileStream, uso a classe File e o método Create para criar o
                //arquivo passando como parâmetro a variável strPathFile, que contém o arquivo
                using (FileStream fs = File.Create(lsCaminhoArquivo + lsNomeArquivo))
                {
                    //Crio outro using, dentro dele instancio o StreamWriter (classe para gravar os dados)
                    //que recebe como parâmetro a variável fs, referente ao FileStream criado anteriormente
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        //Uso o método Write para escrever algo em nosso arquivo texto
                        sw.Write(lsConteudoHtmlBoleto);
                    }
                }
            }
            catch (Exception ex)
            {
               
            }

            Response.Write("<script>");
            Response.Write("window.open('" + lsNomeArquivo + "','_blank')");
            Response.Write("</script>");

            return true;

            /* Usuario loUsuario = ClasseControladora.CadastrarUsuario(loUsuario, lsNickname, lsSenha,
                                                                     lsNome, lsSobrenome);*/
        }
        private void HabilitarControles(bool abTituloCadastrado)
        {
            ButtonEmitirBoleto.Visible = abTituloCadastrado;
            ButtonEmitirDuplicata.Visible = abTituloCadastrado;
            DivCadastro.Visible = !abTituloCadastrado;
        }
        protected void ButtonEmitirBoleto_Click(object sender, EventArgs e)
        {
            this.EmitirBoleto();
           
          
        }

       
        protected void ButtonSalvar_Click(object sender, EventArgs e)
        {
            if (this.OnSave())
            {
                this.HabilitarControles(true);
            }

            return;
        }

        protected void ButtonEmitirDuplicata_Click(object sender, EventArgs e)
        {

        }
        protected void CarregaSacados()
        {
            List<Sacado> loListaSacado = ControladorDaCredito.GetInstance().RecuperaListaSacado();

            foreach (Sacado loSacado in loListaSacado)
            {
                Column_Sacado.Items.Add(new ListItem(loSacado.Pessoa.PesNmPessoa, loSacado.Pessoa.PesIdPessoa.ToString()));
            }
        }

        protected override void IniciaValores()
        {
            base.IniciaValores();

            Cliente loCliente = (Cliente) Session["Cliente"];
            int liNumeroTituloSugerido;

            this.CarregaSacados();

            Field_DataVencimento.value = DateTime.Today.ToString("dd/MM/yyyy");
            Field_DataReferencia.value = DateTime.Today.ToString("dd/MM/yyyy");

            ITituloFinanceiroDAL loTituloFinanceiroDAL = ConcreteDALFactory.CreateTituloFinanceiroDAL();

            liNumeroTituloSugerido = loTituloFinanceiroDAL.GetMaiorNumeroTituloCliente(loCliente);

            if (liNumeroTituloSugerido == null || liNumeroTituloSugerido == 0)
                liNumeroTituloSugerido = 1;

            Field_NumeroDocumento.Text = liNumeroTituloSugerido.ToString();

        }
  

      
    }
}
